前言
这一部分是《Data Analysis for the life sciences》的第5章线性模型的第4小节,这一部分的主要内容涉及ANOVA,有关方差分析的笔记R markdown文档可以参考作者的Github。
ANOVA简介
现在考虑一种情况,如果我们想知道push与pull的差值在整体上,不同的组中是否有区别。换句话讲,我们并不想比较任意两组有差异,我们就想知道,在所有的有腿中,代表了push和pull差值的3个交互作用导致的push和pull差异是否比正常的差异大(即不考虑交互作用的情况)。
通过方差分析(analysis of variance,ANOVA)就可以解决这个问题。ANOVA的本质在于比较不同复杂模型的残差平方和是被哪些因素降低的(我的理解就是,总的残差平方和都是分布在哪些变量上面,哪些变量分到的最多,哪些变量的效应就最强)。含有8个系数的模型比含有5个系数的模型要复杂的多,在5个系数的模型中,我们是假设push和pull在所有组之间的差异是相等的。最简单的模型只使用一个系数,一个截矩。在某些假设下,我们还可以执行推断,确定与我们观察到的一样大的改进概率(Under certain assumptions we can also perform inference that determines the probability of improvements as large as what we observed)。
下面的ANOVA计算的结果(接前文案例):
|
|
结果的第一行中有一个type
变量(表示pull或push),它对应的Sum值为42.783,这就表示,这一单一的系数减少了42.783的平方和。我们看一下总的平方和,其实就是线性模型的截矩,也可以是anova(fitX)
的第2列的和,如下所示:
|
|
结果如下所示:
|
|
需要注意是的是,这个平方和的计算公式最初就是来源于样本方差的计算公式,如下所示:
|
|
计算结果如下所示:
|
|
现在来看一下,前面的42.783是如何得到的。我们需要计算仅包含类型信息模型的残差平方和。我们可以通过计算残差,残差的平方,并将它们加起来就能实现,如下所示:
|
|
结果如下所示:
|
|
这个降低的程度(就是上面的42.78307)就相当于模型~type
和~1
拟合值差值的平方和,如下所示:
|
|
结果如下所示:
|
|
线性模型中的各个项的顺序以及ANOVA表格中的顺序很重要:每行表示的是:当添加了一个新的系数后,残差平方和较未添加这个系数之前减少的量。
在ANOVA表(这个表其实就是ANOAVA计算后的结果)还标明了自由度。当引入了type
这一项时,它对应的Df
就是1,leg
变量引入了3个项(即legL2,legL3和legL4),它对应的Df
就是3(这一段不太理解)。ANOVA还有一列是F value
。F值表示的是包含感兴趣的项(感兴趣的项平方和除以相应自由度)除以残差(ANOVA表中的最后一行除以自自由度),以第一行为例 说明一下就是(42.783/1)/(9.937/274)=1179.686
。
书中给出的公式为:
其中p
表示模型中系数的总数(在这个模型中,包括截矩在内的系数总数是8)。
在零假设成立的前提下(零假设就是添加系数的真值为0),我们会得到每行F值分布的理论结果。这种近似所需的假设类似于t分布近似的假设,例如我们在使用CLT时需要大量的样本,或者是总体的数据服从正态分布。
现在我们来解释一下p值,看最后一行,即type:leg
,内容是type:leg 3 2.098 0.699 19.282 2.256e-11 ***
,type:leg
表示的是3个交互作用系数。在零假设下,这3个附加项的真实值为0,例如,$\beta_{push,L2}=0$,$\beta_{push,L3}=0$,$\beta_{push,L4}=0$,然后我们就计算出ANOVA表的这一行观察到的这么大的F值的概率。这里需要记住,我们只关注大的F值,因为我们有一个平方和的比,因此F值只能是正数(原文:Remember that we are only concerned with large values here, because we have a ratio of sum of squares, the F-value can only be positive. )。type:leg
这一行中的p值可以这么解释:在零假设下,我们认为push和pull的差值在所有组之间是没有差异的,p值表示了,在这个零假设成立时,我们观察到的如此大的方差的可能性。从计算结果中我们可以看到,我们的p值非常小,我们就可以拒绝零假设,即可以认为,push和pull的差值在不同组之间是不同的。
另外,ANOVA中的F值与F分布有关,F分布有2个以参数,一个是分子的自由度(分子是研究对象的自由度,例如前面提到的交互作用),一个是分母的自由度(残差)。从结果可以看到,交互作用系数的自由度是3,残差的自由度是274。
ANOVA模型的另外表示
现在来看一下ANOVA模型的另外表示方法,在这种方式里,我们假设每一对type与leg都有自己的均值(这样,对于每一条腿来说,push与pull的效应就不会相同)。这种表述方式在某种程度上来说更加简单,但是,我们不能像前面那样构建ANOVA表,因为这种方式无法区分交互作用系数。
首先我们会先构建一个因子变量,这个因子变量表示的是type
与leg
的组合,在公式中含有~0
,它表示,我们不在线性模型中包含截矩,其中我们通过rafalib
包中的imagemat()
函数绘制了组变量的矩阵示意图,这个示意图也有8项,它针对每一个type和leg组合进行了拟合,代码如下所示:
|
|
结果如下所示:
|
|
计算估计系数
现在我们绘制出上面计算结果的示意图,如下所示:
|
|
使用contrast包进行简单比较
虽然无法使用这个公式来进行ANOVA分析,但是可以使用contrast()
函数对每组的估计系数进行比较,如下所示:
|
|
结果如下所示:
|
|
无截矩时差值的差异
我们还可以进行push和pull在各级之间的两两(pair-wise)比较。例如,现在我们想比较L3与L2的push和pull的差值,如下所示:
其过程如下所示:
|
|
结果如下所示:
|
|
练习
P230